// Admin.js
import React, { useState, useEffect } from 'react';
import Web3 from 'web3';
import { useParams, Link } from 'react-router-dom';
import '../static/css/app.css'; // 导入 CSS 文件
import ActivityListABI from '../contract/ABIs/ActivityList.json'; // 活动列表合约 ABI
import UserListABI from '../contract/ABIs/UserList.json'; // 用户列表合约 ABI
import AdminABI from '../contract/ABIs/Admin.json'; // 管理员合约 ABI
import { Table, Modal } from 'antd';
import ActivityListAddress from '../contract/ADDRESSes/ActivityListAddress.js'; // 活动列表合约地址
import AdminListAddress from '../contract/ADDRESSes/AdminListAddress'; // 管理员列表合约地址
import UserListAddress from '../contract/ADDRESSes/UserListAddress'; // 用户列表合约地址
import AdminNavBar from './nav/AdminNavBar.js';
// import '../static/indexcss/aacsss.css';
import Eye from './Eye.js'
import Admin_integralNavBar from './nav/Admin_integralNavBar.js'


const Admin = () => {
    const [web3, setWeb3] = useState(null);
    // 使用 useParams 获取路由参数中的地址信息
    const { address } = useParams();
    const [contractActivityList, setcontractActivityList] = useState(null);
    const [contractUserList, setContractUserList] = useState(null);
    const [contractAdmin, setcontractAdmin] = useState(null);
    const [isAdmin, setIsAdmin] = useState(false);

    const [activityName, setactivityName] = useState('');
    const [activityCategory, setactivityCategory] = useState('');
    const [activityContinue, setactivityContinue] = useState('');
    const [activityDescription, setactivityDescription] = useState('');
    const [activityId, setactivityId] = useState('');
    const [userAddress, setUserAddress] = useState('');// 用户合约地址
    const [userList, setUserList] = useState('') //查看所有用户列表
    const [activityList, setactivityList] = useState('') //查看所有活动列表
    const [date, setDate] = useState('');
    const [IsList, setIsList] = useState(false);//控制是否显示列表
    const [categoryFilter, setCategoryFilter] = useState('');//用于通过分类查询

    // 新增状态变量来存储用户积分 
    // const [userPoints, setUserPoints] = useState(0);
    const columns = [
        {
            title: '姓名',
            dataIndex: 'userName',
            key: 'userName',
            render: (text) => (
                <span style={{ color: 'black' }}>
                    {text}
                </span>
            )
        },
        {
            title: '性别',
            dataIndex: 'gender',
            key: 'gender',
            render: (text) => (
                <span style={{ color: 'black' }}>{text == true ? '男' : '女'}</span>
            ),
        },
        {
            title: '手机号',
            dataIndex: 'phone',
            key: 'phone',
            render: (text) => (
                <span style={{ color: 'black' }}>
                    {text}
                </span>
            )
        },
        {
            title: '积分',
            dataIndex: 'nowPoint',
            key: 'nowPoint',
            render: (text) => {
                const newText = text.toString(); // 将文本转换为字符串
                return <span style={{ color: 'black' }}>{newText}</span>;
            },
        },

        // {
        //     title: '操作',
        //     key: 'action',
        //     render: (text, record) => (
        //         <button type="primary" onClick={() => handleAudit(record)}>
        //             审核
        //         </button>
        //     ),
        // }
    ];
    useEffect(() => {
        async function init() {
            // 连接到以太坊网络
            if (window.ethereum) {
                const web3Instance = new Web3(window.ethereum);
                try {
                    // 请求用户授权
                    await window.ethereum.enable();
                    setWeb3(web3Instance);

                    // 创建活动列表合约实例
                    const activityListInstance = new web3Instance.eth.Contract(
                        ActivityListABI,
                        ActivityListAddress
                    );
                    setcontractActivityList(activityListInstance);

                    // 创建用户列表合约实例
                    const userListInstance = new web3Instance.eth.Contract(
                        UserListABI,
                        UserListAddress
                    );
                    setContractUserList(userListInstance);

                    // 创建管理员合约实例
                    const adminInstance = new web3Instance.eth.Contract(
                        AdminABI,
                        address
                    );
                    setcontractAdmin(adminInstance);

                    // 获取当前用户的以太坊账户地址
                    const accounts = await web3Instance.eth.getAccounts();
                    const currentAddress = accounts[0];
                    // 获取管理员合约的 owner 地址
                    const ownerAddress = await adminInstance.methods.getOwner().call();
                    // 检查当前账户是否是管理员本人
                    setIsAdmin(currentAddress === ownerAddress);
                } catch (error) {
                    console.error(error);
                }
            } else {
                console.error('请安装以太坊浏览器插件，如 MetaMask');
            }
        }
        init();
    }, [address]);


    //管理员查询用户列表
    const GetAllUsers = async () => {
        if (contractUserList) {
            try {
                const accounts = await web3.eth.getAccounts();
                const fromAddress = accounts[0];
                console.log("fromAddress:", fromAddress);
                // 调用合约函数
                const result = await contractUserList.methods.getAllUsers().call({ from: fromAddress });
                console.log("返回的用户信息：", result);
                setUserList(result);
                setIsList(true);//让列表显示出来
            } catch (error) {
                console.error(error);
            }
        };
    };
    const handleFilterActivity = async () => {
        if (contractUserList) {
            try {
                const filteredActivityList = userList.filter((activity) => activity.userName === categoryFilter);//设置通过类别查询
                setUserList(filteredActivityList);

                setIsList(true);
            } catch (error) {
                console.error(error);
            }
        }
    };
    return (
        <div>
            {/* 如果当前账户不是管理员，则显示提示信息 */}
            {!isAdmin && (<div>您没有权限访问此页面。</div>)}

            {/* 管理员界面 */}
            {isAdmin && (
                <div>
                    {/* <nav className="navbar navbar-expand-lg fixed-top portfolio-navbar gradient navbar-dark">
                        <div className="container">
                            <a className="navbar-brand logo" href="#">先锋积分</a>
                            <button className="navbar-toggler" data-bs-target="#navbarNav" data-bs-toggle="collapse">
                                <span className="visually-hidden">Toggle navigation</span>
                                <span className="navbar-toggler-icon" />
                            </button>
                            <div className="collapse navbar-collapse" id="navbarNav">
                                <ul className="navbar-nav ms-auto">
                                    <li className="nav-item">
                                        <Link className="nav-link" to={`/admin/${address}`}>管理员端首页</Link>
                                    </li>
                                    <li className="nav-item">
                                        <Link className="nav-link" to={`/admin/${address}/Admin_publishActivity`}>活动发布</Link>
                                    </li>
                                    <li className="nav-item">
                                        <Link className="nav-link" to={`/admin/${address}/Admin_ActivityList`}>活动管理</Link>
                                    </li>
                                    <li className="nav-item">
                                        <Link className="nav-link" to={`/admin/${address}/Admin_ResearchPoint`}>积分管理</Link>
                                    </li>
                                    <li className="nav-item">
                                        <Link className="nav-link" to={`/admin/${address}/Admin_UserInfoList`}>用户管理</Link>
                                    </li>
                                    <li className="nav-item">
                                        <Link className="nav-link" to={`/admin/${address}/Admin_addStudents`}>添加学生</Link>
                                    </li>
                                    <li className="nav-item">
                                        <Link className="nav-link" to={`/admin/${address}/Admin_GetTotalCredit`}>计算总学分</Link>
                                    </li>
                                    
                                    <li className="nav-item">
                                        <Link className="nav-link" to={`/admin/${address}/GetTotalScore`}>计算总成绩</Link>
                                    </li>
                                    <li className="nav-item">
                                        <Link className="nav-link" to={`/admin/${address}/Admin_CourseManage`}>课程管理</Link>
                                    </li>
                                    <li className="nav-item">
                                        <Link className="nav-link" to={`/admin/${address}/Admin_addMultiCourses`}>批量添加课程</Link>
                                    </li>
                                    <li className="nav-item">
                                        <Link className="nav-link" to={`/admin/${address}/Admin_GetUserCourseInfo`}>查询用户课程信息</Link>
                                    </li>
                                    <li className="nav-item">
                                        <Link className="nav-link" to={`/admin/${address}/Admin_getStudentInfoList`}>查询用户学生信息列表</Link>
                                    </li>
                                    
                                    <li className="nav-item">
                                        <Link className="nav-link" to={`/`}>退出登录</Link>
                                    </li>
                                </ul>
                            </div>
                        </div>
                    </nav> */}
                    <Admin_integralNavBar address={address} />

                    <main className="page hire-me-page">
                        <section className="portfolio-block hire-me">
                            <div className="foreground-component">
                                <Eye />
                                <div className="container">
                                    <div className="border rounded border-0 shadow-lg p-3 p-md-5"
                                        data-bs-theme="light"
                                        style={{
                                            backgroundColor: 'rgba(36, 36, 41, 0.6)'
                                        }}
                                    >
                                        <div className="mb-3">



                                            <h2>用户列表信息</h2>

                                            <div className="d-flex justify-content-end mt-3">
                                                <div className="input-group mb-3" style={{ maxWidth: '300px' }}>
                                                    <input
                                                        type="text"
                                                        className="form-control"
                                                        placeholder="输入姓名查询"
                                                        aria-label="姓名查询"
                                                        aria-describedby="basic-addon2"
                                                        value={categoryFilter}
                                                        onChange={(e) => setCategoryFilter(e.target.value)}
                                                    />
                                                    <div className="input-group-append">
                                                        <button className="btn btn-primary btn-lg d-block w-100" type="button" onClick={handleFilterActivity}>搜索</button>
                                                    </div>
                                                </div>
                                            </div>
                                            {IsList ? (
                                                <Table
                                                    dataSource={userList}
                                                    columns={columns} // 确保你已经定义了columns
                                                    pagination={{
                                                        pageSize: 2,
                                                        showTotal: false, // 隐藏总页数
                                                        showSizeChanger: false, // 隐藏页面大小选择器
                                                        itemRender: (current, type, originalElement) => (
                                                            <span style={{ color: 'black' }}>
                                                                {current}
                                                            </span>
                                                        ),
                                                    }}                                                //  onRow={onRow} // 确保你传递了onRow函数，用于保存对应的id
                                                />
                                            ) : (
                                                <div>No activity information available.</div>
                                            )}



                                            <div className="mb-3 mt-4">
                                                <button className="btn btn-primary btn-lg d-block w-100" onClick={GetAllUsers}>查询用户列表信息</button>
                                            </div>



                                        </div>
                                    </div>
                                </div>
                            </div>
                        </section>
                    </main>
                </div>
            )}
        </div>
    );
}

export default Admin;
